package Hot100.Medium.GreedyAndDP.DynamicPlanning;

public class LC62_uniquePathsInGrid {
    public static void main(String[] args) {

    }

    public int uniquePaths(int m, int n){
        // dp数组含义是到dp[i][j]第i行第j列一共有多少种走法
        int[][] dp = new int[m][n];

        // 构造初始化条件，网格中第一行第一列都只有一种走法
        for(int i = 0; i <= m; i++){
            dp[i][0] = 1;
        }
        for(int j = 0; j <= n; j++){
            dp[0][j] = 1;
        }
        // 递推公式是，由于智能往右以及往下走，那么肯定i，j这一地方走法等于他上面以及左边这一格子走法之和
        for(int i = 1; i < m; i++){
            for(int j = 1; j < n; j++){
                dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
            }
        }
        return dp[m - 1][n - 1];
    }
}
